package com.bw;

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class DateFolderScanner {

    // 预定义匹配模式（按优先级排序）
    private static final Pattern[] DATE_PATTERNS = {
            // 1. 中文明确格式：3月4日、12月31号（支持1-12月，1-31日）
            Pattern.compile("(0?[1-9]|1[0-2])月(0?[1-9]|[12][0-9]|3[01])[日号]"),
            // 2. 分隔符格式：3.4、03-4、12/31（支持 ./- 分隔符）
            Pattern.compile("(0?[1-9]|1[0-2])[_./-](0?[1-9]|[12][0-9]|3[01])\\b"), // 新增单词边界
            // 3. 紧凑格式：0304、1231（严格匹配4位数字）
            Pattern.compile("^(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])$"),
            // 4. 混合格式：3月4、12.31（宽松匹配）
            Pattern.compile("(0?[1-9]|1[0-2])[_月./-](0?[1-9]|[12][0-9]|3[01])")
    };

    public static String matchDay(String str, int targetMonth, int targetDay) {

        return findFoldersByDate(
                str,
                targetMonth,
                targetDay
        );

    }

    public static String findFoldersByDate(String dir, int targetMonth, int targetDay) {
        Integer[] date = parseDateFromName(dir);
        if (date != null && date[0] == targetMonth && date[1] == targetDay) {
            return dir;
        }
        return null;
    }

    private static Integer[] parseDateFromName(String folderName) {
        for (Pattern pattern : DATE_PATTERNS) {
            Matcher matcher = pattern.matcher(folderName);
            if (matcher.find()) {
                try {
                    int month = Integer.parseInt(matcher.group(1));
                    int day = Integer.parseInt(matcher.group(2));

                    if (isValidDate(month, day)) {
                        return new Integer[]{month, day};
                    }
                } catch (NumberFormatException e) {
                    continue;
                }
            }
        }
        return null;
    }

    private static boolean isValidDate(int month, int day) {
        return (month >= 1 && month <= 12) && (day >= 1 && day <= 31);
    }
}
